﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bzure.Tools.Templates.Codes;
using Bzure.Common.Core;
using System.Linq.Expressions;
using System.Reflection;

namespace Bzure.Tools.Templates
{
   
   
    //public class EntityProviderGenerator : Generator
    //{
    //    static EntityProviderGenerator()
    //    {
    //        _set = new Dictionary<string, List<EntityDataMap>>();
    //    }
    //    static Dictionary<string, List<EntityDataMap>> _set;
    //    public static void AddEntityDataMapSection(string sectionName, List<EntityDataMap> list)
    //    {
    //        _set[sectionName] = list;
    //    }
    //    public static Dictionary<string, List<EntityDataMap>> EntityDataMapSet
    //    {
    //        get
    //        {
    //            return _set;
    //        }
    //    }
    //    string SectionName = string.Empty;
    //    string ConnectionName = string.Empty;
    //    protected override IDictionary<string, Template> CreateTemplates()
    //    {
    //        Dictionary<string, Template> templates = new Dictionary<string, Template>();
    //        templates.Add(string.Format("{0}-Provider.cs", SectionName), new EntityProviderTemplate(SectionName, ConnectionName));
    //        return templates;
    //    }
    //    public EntityProviderGenerator MapSection(string SectionName)
    //    {
    //        this.SectionName = SectionName;
    //        return this;
    //    }
    //    public EntityProviderGenerator MapConnection(string ConnectionName)
    //    {
    //        this.ConnectionName = ConnectionName;
    //        return this;
    //    }
    //}
    //public class EntityMapGenerator<T> : Generator where T : TemplateEntity
    //{
    //    public EntityMapGenerator(string SectionName)
    //    {
    //        this.SectionName = SectionName;
    //        List<EntityDataMap> list = default(List<EntityDataMap>);
    //        if (!EntityProviderGenerator.EntityDataMapSet.TryGetValue(SectionName, out list))
    //        {
    //            list = new List<EntityDataMap>();
    //            EntityProviderGenerator.AddEntityDataMapSection(SectionName, list);
    //        }
    //        EntityDataMap map = new EntityDataMap()
    //        {
    //            EntityName = typeof(T).Name,
    //            DataName = EntityMapTemplate<T>.BuildClassName(),
    //            NameSpace = typeof(T).Namespace,
    //            EntityFullName = typeof(T).FullName
    //        };
    //        if (!list.Contains(map))
    //            list.Add(map);
    //    }
    //    string SectionName = string.Empty;
    //    Dictionary<string, ColumnMap> columns = new Dictionary<string, ColumnMap>();
    //    string tableName = string.Empty;
    //    string Key = string.Empty;
    //    protected override IDictionary<string, Template> CreateTemplates()
    //    {
    //        Dictionary<string, Template> templates = new Dictionary<string, Template>();
    //        templates.Add(string.Format("{0}-Repository.cs", typeof(T).Name), new EntityMapTemplate<T>(SectionName, this.tableName, this.Key, this.columns));
    //        return templates;
    //    }
    //    public EntityMapGenerator<T> MapTable(string TableName)
    //    {
    //        this.tableName = TableName;
    //        return this;
    //    }
    //    public EntityMapGenerator<T> MapKey(Expression<Func<T, object>> expression)
    //    {
    //        this.Key = expression.GetMemberFromExpression().Name;
    //        return this;
    //    }
    //    public EntityMapGenerator<T> MapColumn(Expression<Func<T, object>> expression, string ColumnName)
    //    {
    //        ColumnMap ColumnMap = expression.GetColumnMap(ColumnName);

    //        if (ColumnMap.IsNotNull())
    //        {
    //            columns[ColumnMap.FieldName] = ColumnMap;
    //        }
    //        return this;
    //    }

    //}
   
}
